package cn.sylinx.horm.model.anno;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import cn.sylinx.horm.type.handler.TypeHandler;
import cn.sylinx.horm.type.handler.UnknownTypeHandler;

/**
 * 列描述
 * 
 * @author han
 *
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface Column {

    public static final String DEFAULT_VALUE_NULL = "";
    
    /**
     * 对应列名称
     * 
     * @return
     */
    String column() default "";

    /**
     * 是否忽略字段
     * 
     * @return
     */
    boolean ignore() default false;

    /**
     * 字段描述
     * 
     * @return
     */
    String value() default "";

    /**
     * 长度
     * 
     * @return
     */
    int len() default 0;

    /**
     * 精度
     * 
     * @return
     */
    int precision() default 0;

    /**
     * 是否可空
     * 
     * @return
     */
    boolean nullable() default true;

    /**
     * 二进制
     * 
     * @return
     */
    boolean blob() default false;

    /**
     * 二进制类型
     * 
     * @return
     */
    BlobType blobType() default BlobType.MIN;

    /**
     * 长文本
     * 
     * @return
     */
    boolean text() default false;

    /**
     * 长文本类型
     * 
     * @return
     */
    TextType textType() default TextType.MIN;

    /**
     * 默认值
     * 
     * @return
     */
    String defaultValue() default DEFAULT_VALUE_NULL;
    
    /**
     * 指定typeHandler
     * 
     * @return
     */
    Class<? extends TypeHandler<?>> typeHandler() default UnknownTypeHandler.class;
}
